﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Negocio.Entidades;
using System.Configuration;
using System.Data;

namespace Negocio.AccesoDatos
{
    public class ProyectoDAO: AccesoADatos
    {
        static SqlConnection con;
        public ProyectoDAO() { }

        static void abrirConexion() {
            con = new SqlConnection();
            try
            {
                con.ConnectionString = ConfigurationManager.ConnectionStrings["AVEIT"].ConnectionString;
                con.Open();
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error al conectarse a la base de datos. " + ex.Message);
            }
        }

        static void cerrarConexion()
        {
            if (con != null && con.State == ConnectionState.Open)
                con.Close();
        }

        public static void GrabarProyecto(ProyectoE pro, List<Actividad> actividades)
        {
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = null;
            abrirConexion();

            try
            {
                trans = con.BeginTransaction();
                cmd.Connection = con;
                cmd.Transaction = trans;

                cmd.CommandType = CommandType.Text;

                string cadena = "INSERT INTO Proyecto(nombre_proyecto, objetivos, fecha_inicio, fecha_finalizacion, " +
                    "presupuesto, numero_socio_encargado, id_subcomision, finalizado, socios_involucrados) " +
                    "VALUES (@nombre, @objetivo, @fecha_inicio, @fecha_fin, @presup, @socio_enc, @subcomision, @fin, @socios_inv); SELECT MAX(id_proyecto) FROM Proyecto;";

                cmd.Parameters.Add(new SqlParameter("@nombre", pro.nombre));
                cmd.Parameters.Add(new SqlParameter("@objetivo", pro.objetivo));
                cmd.Parameters.Add(new SqlParameter("@fecha_inicio", pro.fecha_inicio));
                cmd.Parameters.Add(new SqlParameter("@fecha_fin", pro.fecha_fin));
                cmd.Parameters.Add(new SqlParameter("@presup", pro.presupuesto));
                cmd.Parameters.Add(new SqlParameter("@socio_enc", pro.socio_encargado));
                cmd.Parameters.Add(new SqlParameter("@subcomision", pro.subcomision));
                cmd.Parameters.Add(new SqlParameter("@fin", pro.finalizado));
                cmd.Parameters.Add(new SqlParameter("@socios_inv", pro.socios_involucrados));

                //SqlParameter pr_nombre = new SqlParameter("@nombre", pro.nombre);
                //SqlParameter pr_objetivo = new SqlParameter("@objetivo", pro.objetivo);
                //SqlParameter pr_fecha_inicio = new SqlParameter("@fecha_inicio", pro.fecha_inicio);
                //SqlParameter pr_fecha_fin = new SqlParameter("@fecha_fin", pro.fecha_fin);
                //SqlParameter pr_presup = new SqlParameter("@presup", pro.presupuesto);
                //SqlParameter pr_socio_enc = new SqlParameter("@socio_enc", pro.socio_encargado);
                //SqlParameter pr_subco = new SqlParameter("@subcomision", pro.subcomision);
                //SqlParameter pr_fin = new SqlParameter("@fin", pro.finalizado);
                //SqlParameter pr_socios_inv = new SqlParameter("@socios_inv", pro.socios_involucrados);

                cmd.CommandText = cadena;

               // int id_proyecto = ejecutarSQLeIdentity(cadena, pr_nombre, pr_objetivo, pr_fecha_inicio, pr_fecha_fin, pr_presup, pr_socio_enc, pr_subco, pr_fin, pr_socios_inv);
                int id_proyecto = int.Parse(cmd.ExecuteScalar().ToString());
               
                foreach (Actividad item in actividades)
                {
                    
                    SqlCommand cmdAct = new SqlCommand();
                    cmdAct.Connection = con;
                    cmdAct.Transaction = trans;
                    string cadena_act = "INSERT INTO Actividad (id_proyecto, nombre_actividad, descripcion, numero_socio_asignado, " +
                        "fecha_inicio, fecha_finalizacion, finalizado)" +
                        " VALUES (@proyecto, @nombre_act, @descripcion, @socio, @inicio, @finalizacion, @fin)";
                    //cmdAct.Parameters.Add(new SqlParameter("@id_actividad", numeroActividad));
                    cmdAct.Parameters.Add(new SqlParameter("@proyecto", id_proyecto));
                    cmdAct.Parameters.Add(new SqlParameter("@nombre_act", item.nombre_actividad));
                    cmdAct.Parameters.Add(new SqlParameter("@descripcion", item.descripcion));
                    cmdAct.Parameters.Add(new SqlParameter("@socio", item.socio_encargado));
                    cmdAct.Parameters.Add(new SqlParameter("@inicio", item.fecha_inicio));
                    cmdAct.Parameters.Add(new SqlParameter("@finalizacion", item.fecha_fin));
                    cmdAct.Parameters.Add(new SqlParameter("@fin", item.finalizado));

                    cmdAct.CommandText = cadena_act;
                    cmdAct.ExecuteNonQuery();
                }
                trans.Commit();
            }
            catch (SqlException ex)
            {
                if (trans != null)
                    trans.Rollback();
                throw new ApplicationException("Error al ejecutar la transaccion en la Base de Datos " + ex.Message.ToString());
            }
            finally
            {
                cerrarConexion();
            }
        }

        public static DataTable GenerarInforme(string cadena)
        {
            return consultarSQL(cadena);
        }
        public static DataTable ObtenerActividadesProyecto(int id_proyecto)
        {
            string cadena = "SELECT nombre_actividad, descripcion, finalizado FROM Actividad WHERE id_proyecto = @idproyecto";
            SqlParameter pr_id = new SqlParameter("@idproyecto", id_proyecto);

            return consultarSQL(cadena, pr_id);
        }
    }

}